//
//  main.m
//  02-ClassAndObject
//
//  Created by dllo on 16/7/5.
//  Copyright © 2016年 高雅馨. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Fraction.h"
int main(int argc, const char * argv[]) {
    /**
     *  1. 快捷键
     * command + 0 开/收起左边栏
     * command + option + 0 开/收右边栏
     * command + shift + y 开/收下边栏
     * command + r/c/v/b/z 运行复制粘贴编ཻ译ཻ撤ཻ销ཻ
     * command + ⬅️/➡️/⬆️/ ⬇️
     * shift + ⬅️/➡️/↑/↓  选中文字
     * command + shift + ⬅️/➡️/⬆️/ ⬇️ 选ཻ中ཻ全ཻ部ཻ
     */
    
    
    /**
     *  2. 类ཻ和ཻ对ཻ象ཻ
     * 类ཻ: 一ཻ个ཻ具ཻ有ཻ相ཻ同ཻ特ཻ征ཻ和ཻ行ཻ为ཻ的ཻ事ཻ物ཻ抽ཻ象ཻ集ཻ合ཻ
     * 对ཻ象ཻ: 类的实例,也ཻ称ཻ作ཻ类ཻ的ཻ实ཻ现.
     * 面̈̈向̈̈对̈̈象̈̈的̈̈思̈̈想̈̈,万̆物̆都̆是̆对̆象̆.
     * 面̆向̆对̆象̆语̆言̆是̆面̆向̆对̆象̆思̆想̆的̆具̆体̆体̆现̆,
     * OOP 面̆向̆对̆象̆编̆程̆
     * OOD 面̆向̆对̆象̆设̆计̆
     * 面向对象三大特征: 封装继承多态 提高代码的复用
     */
    
    /**
     *  3. Objective-C(OC)
     * 与C语言的区别
     * OC属于C语言的扩展
     * OC中有类的概念
     * OC中声明属性和方法在.h中
     * 实现在.m
     * .mm C++的文件, 在这个文件中可以编写C++代码
     */
    /**
     *  4. 创建OC实例
     * ① 消息语法 (objc doSomething);
             向objc对象发送一个doSomething的方法,让他去调用
     * 类方法调用(用类名去调用其+方法)
        +alloc 开辟内存空间
        NSObject *objc = [NSObject alloc];
     * 实例方法的调用
     * -init
       NSObject *newObjc = [objc init];
     Person *per = [[Person alloc] init];
     per ->_age = 18;
     */
    
    /**
     *  id 与 instancetype
     * instancetype 在作为参数返回值的时候与id是一样的,系统编译器会吧id类型转换成instancetype(即当前对象类型)
     * id 可以作为变量类型去使用,instancetype不可以
     */
    Fraction *frac1 = [Fraction fractionWithMemeber:-2 Deno:4];
    Fraction *frac2 = [Fraction fractionWithMemeber:1 Deno:2];
    [frac1 addAnotherFraction:frac2];
    [frac1 subAnotherFraction:frac2];
    [frac1 mulAnotherFraction:frac2];
    [frac1 divAnotherFraction:frac2];
        return 0;
}
